home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / python2.4 / funcobject.h < prev    next >
Encoding:
C/C++ Source or Header  |  2005-10-18  |  2.9 KB  |  77 lines

  1.  
  2. /* Function object interface */
  3.  
  4. #ifndef Py_FUNCOBJECT_H
  5. #define Py_FUNCOBJECT_H
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9.  
  10. /* Function objects and code objects should not be confused with each other:
  11.  *
  12.  * Function objects are created by the execution of the 'def' statement.
  13.  * They reference a code object in their func_code attribute, which is a
  14.  * purely syntactic object, i.e. nothing more than a compiled version of some
  15.  * source code lines.  There is one code object per source code "fragment",
  16.  * but each code object can be referenced by zero or many function objects
  17.  * depending only on how many times the 'def' statement in the source was
  18.  * executed so far.
  19.  */
  20.  
  21. typedef struct {
  22.     PyObject_HEAD
  23.     PyObject *func_code;    /* A code object */
  24.     PyObject *func_globals;    /* A dictionary (other mappings won't do) */
  25.     PyObject *func_defaults;    /* NULL or a tuple */
  26.     PyObject *func_closure;    /* NULL or a tuple of cell objects */
  27.     PyObject *func_doc;        /* The __doc__ attribute, can be anything */
  28.     PyObject *func_name;    /* The __name__ attribute, a string object */
  29.     PyObject *func_dict;    /* The __dict__ attribute, a dict or NULL */
  30.     PyObject *func_weakreflist;    /* List of weak references */
  31.     PyObject *func_module;    /* The __module__ attribute, can be anything */
  32.  
  33.     /* Invariant:
  34.      *     func_closure contains the bindings for func_code->co_freevars, so
  35.      *     PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
  36.      *     (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
  37.      */
  38. } PyFunctionObject;
  39.  
  40. PyAPI_DATA(PyTypeObject) PyFunction_Type;
  41.  
  42. #define PyFunction_Check(op) ((op)->ob_type == &PyFunction_Type)
  43.  
  44. PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
  45. PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);
  46. PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
  47. PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
  48. PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
  49. PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
  50. PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
  51. PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
  52.  
  53. /* Macros for direct access to these values. Type checks are *not*
  54.    done, so use with care. */
  55. #define PyFunction_GET_CODE(func) \
  56.         (((PyFunctionObject *)func) -> func_code)
  57. #define PyFunction_GET_GLOBALS(func) \
  58.     (((PyFunctionObject *)func) -> func_globals)
  59. #define PyFunction_GET_MODULE(func) \
  60.     (((PyFunctionObject *)func) -> func_module)
  61. #define PyFunction_GET_DEFAULTS(func) \
  62.     (((PyFunctionObject *)func) -> func_defaults)
  63. #define PyFunction_GET_CLOSURE(func) \
  64.     (((PyFunctionObject *)func) -> func_closure)
  65.  
  66. /* The classmethod and staticmethod types lives here, too */
  67. PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
  68. PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
  69.  
  70. PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
  71. PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
  72.  
  73. #ifdef __cplusplus
  74. }
  75. #endif
  76. #endif /* !Py_FUNCOBJECT_H */
  77.